iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
佛心分享-IT 人自學之術

從0開始學PYTHON系列 第 28

Day28 聊天機器人(2)

  • 分享至 

  • xImage
  •  

中為接收與解析Line訊息和貼圖

一個「訊息事件」物件包含這些資料欄位(屬性):

  • type:類型,其值為 ' message '(訊息)。
  • timestamp:時間戳記;紀錄訊息發送時間。
  • source:來源;訊息發送者的類型(用戶、群組或聊天室)、使用者識別碼。
  • reply_token:回覆令牌;指出回覆訊息的對象。
  • message:訊息內容;貼圖、文字、GPS 座標等資料物件。

line-bot-sdk程式庫內有linebot.models套件
裡面也有很多不同的模組可以使用

訊息事件的模組為MessageEvent,能夠處理文字類型

接收類
TextMessage:文字訊息
StickerMessage:貼圖訊息
ImageMessage:影像訊息
LocationMessage :地點(GPS 座標)訊息

回覆類
TextSendMessage:包裝文字訊息
StickerSendMessage:包裝貼圖訊息
ImageSendMessage:包裝影像訊息
LocationSendMessage:包裝地點(GPS 座標)訊

因此想接收和回覆「文字」訊息的程式開頭需引用以上模組

from linebot.models import MessageEvent, TextMessage, TextSendMessage

回覆訊息的語法:
line_bot_api.reply_message(回覆令牌, 訊息)

例
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
txt=event.message.text     <-收到的訊息文字
line_bot_api.reply_message(event.reply_token, TextSendMessage (text=txt)
)

回覆貼圖:
Line聊天機器人只能使用四組官方預設的貼圖包,而每一張貼圖都有唯一的貼圖包編號和貼圖編號

例
{
"message":{"id":"訊息識別碼",
"packageId": "1", "stickerId": "1", "type": "sticker"},
"'replyToken":"回覆令牌代碼",
"'source":{"type":"user", "userId":"使用者唯一識別碼"},
"timestamp":時間戳記,
"type": "message"
}

回覆貼圖語法:
StickerSendMessage(package_id=貼圖包編號, sticker_id=貼圖編號)

接收貼圖並回覆相同貼圖:

from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, StickerMessage, StickerSendMessage
)

@handler.add(MessageEvent, message=StickerMessage)
def handle_sticker_message(event):
       pid=event.message.package_id    <-收到的貼圖包編號
       sid=event.message.sticker_id    <-貼圖編號
       line_bot_api.reply_message(
       event.reply_token,
       StickerSendMessage(package_id=pid, sticker_id=sid)
)

上一篇
Day27 聊天機器人(1)
下一篇
Day29 聊天機器人(3)
系列文
從0開始學PYTHON30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言